#include "time_iic.h"
#include "display.h"
#include "machine_stat.h"
#include "sc95f.h"
void delay(uint8_t n)
{
	uint8_t i;
	for (i=0; i<n;i++)
	{
		
	}
}
void delay_us1(uint8_t timer)
{
	
	//for(;timer>0;timer--);
}
void delay_us(uint8_t timer)
{
	delay_us1();
	//for(;timer>0;timer--);
}


void AiP33624_start(void)			//开始信号,CLK为高时，DIO下降沿
{
	SDA_624 = 1;
	delay_us1(1);
	SCL_624 = 1;
	delay_us1(1);
	SDA_624 = 0;
	delay_us1(1);
	SCL_624 = 0;
	delay_us1(1);
}

void AiP33624_stop(void)			//停止信号,CLK为高时，DIO上升沿
{
	SCL_624 = 0;
	delay_us1(1);
	SDA_624 = 0;
	delay_us1(1);
	SCL_624 = 1;
	delay_us1(1);
	SDA_624 = 1;
	delay_us1(1);
}

void AiP33624_write(unsigned char dat)	//写8bit数据
{
	unsigned char i;
	for(i = 0; i < 8; i++)
	{

		SCL_624 = 0;
		delay_us1(1);
		if(dat & 0x80)
		{
			SDA_624 = 1;
		}
		else
		{
			SDA_624 = 0;
		}
		   //高位先传
		delay_us1(1);
		SCL_624 = 1;
		dat <<= 1;
		delay_us1(1);
	}
}

void write_cmd(unsigned int cmd)				//写8位指令
{
	AiP33624_start();					//开始
	AiP33624_write(cmd);				//写入命令
	AiP33624_stop();					//结束
}

/**********************************************************
//	*	函数名称：显示数据传输
//	*	功		能：逐灯点亮
//	*	参		数：
//	*	返 回 值：无
***********************************************************/

void AiP33624_WriteData1(unsigned char addr1,unsigned char addr2,unsigned char dat)
{
	write_cmd(0x1d);						//设置SEG输出恒流大小（ISEG=6.75mA+CURRENTx0.745mA, CURRENT[4:0])  1d   10  18
	write_cmd(0x1d);
	write_cmd(0x7C);            //GRID1~GRID6有效，RAM地址  固定
	write_cmd(addr1);
	AiP33624_start();					//开始
	AiP33624_write(addr2);				//写入地址
	AiP33624_write(dat);			//初始化数据
	AiP33624_stop();					//结束
	write_cmd(0x8c);                        // ，显示开
}
/**********************************************************
//	*	函数名称：显示数据传输
//	*	功		能：一个一个点亮
//	*	参		数：
//	*	返 回 值：无
***********************************************************/
	void AiP33624_WriteData2(unsigned char addr1,unsigned char addr2,unsigned char dat1,unsigned char dat2)
{
	int i;
	write_cmd(0x68);            //GRID1~GRID6有效，RAM地址自加
	write_cmd(0X20);
	AiP33624_start();					  //开始
	AiP33624_write(0XC0);				//写入地址

	for(i=0;i<60;i++)
	{
		AiP33624_write(dat1);			//初始化数据
	}
	AiP33624_stop();					//结束
	write_cmd(0x6C);            //GRID1~GRID6有效，固定RAM地址
	write_cmd(addr1);
	AiP33624_start();					//开始
	AiP33624_write(addr2);				//写入地址
	AiP33624_write(dat2);			//初始化数据
	AiP33624_stop();					//结束
 	//}
}

/**********************************************************
//	*	函数名称：显示数据传输
//	*	功		能：全RAM写数据
//	*	参		数：
//	*	返 回 值：无
***********************************************************/

void AiP33624_WriteData(unsigned char addr1,unsigned char dat)
{
	unsigned char i;
	write_cmd(0x78);            //GRID1~GRID8有效，RAM地址自加
	write_cmd(0x20);
	AiP33624_start();					//开始
	AiP33624_write(addr1);				//写入地址
	for(i=0;i<80;i++)
	{
		AiP33624_write(dat);
	}

	AiP33624_stop();					//结束
}

/**********************************************************
//	*	函数名称：显示数据定点改写
//	*	功		能：
//	*	参		数：
//	*	返 回 值：无
***********************************************************/
void AiP33624_WriteData4(unsigned char addr1,unsigned char addr2,unsigned char dat)
{
	write_cmd(0x6C);					//GRID1~GRID6有效，固定地址写
	AiP33624_start();					//开始
	AiP33624_write(addr1);				//写入地址  addr1对应编号2指令
	AiP33624_stop();					//结束
	AiP33624_start();					//开始
	AiP33624_write(addr2);				//写入地址  addr2对应编号5指令

	AiP33624_write(dat);				//写入数据
	AiP33624_stop();					//结束
}
/**********************************************************
//	*	函数名称：芯片初始化
//	*	功		能：初始化内部寄存器及显示数据
//	*	参		数：
//	*	返 回 值：
***********************************************************/
void AiP33624_init(void)
{
	write_cmd(0x1d);						//设置SEG输出恒流大小（ISEG=6.75mA+CURRENTx0.745mA, CURRENT[4:0])  1d   10  18
	write_cmd(0x1d);
	write_cmd(0x40);
	write_cmd(0x78);						//GRID1~GRID8有效，RAM地址自加
	write_cmd(0x84);						//GRID扫描及扫描间隔时间设定，显示关
	AiP33624_WriteData(0xc0,0x00);			//VFD=0,RAM6=0初始化显示数据，清显示
	write_cmd(0x8c);                        // ，显示开
}





void AiP650_start(void)			//开始信号
{													//CLK为高时，DIO下降沿
	SDA_650 = 1;
	SCL_650 = 1;
	delay_us(1);
	SDA_650 = 0;
	delay_us(1);   
}

void AiP650_stop(void)				//停止信号
{													//CLK为高时，DIO上升沿
	SDA_650 = 0;
	SCL_650 = 1;
	delay_us(1);
	SDA_650 = 1;
	delay_us(1);
}

/**********************************************************
//	*	函数名称：IIC的应答检测
//	*	功		能：判断从机返回的ACK信号
//	*	参		数：无
//	*	返 回 值：无
***********************************************************/
void ack(void)						//ACK应答
{													//第九个时钟，应答检测
	SCL_650 = 0;
	SDA_650=0;
	delay_us(1);



	SCL_650 = 1;
	delay_us(1);
	if(SDA_650_IN);

	SCL_650=0;
	delay_us(1);
	SCL_650 = 0;
	delay_us(1);
}

/**********************************************************
//	*	函数名称：数据传输
//	*	功		能：写8bit数据
//	*	参		数：dat（发送到数据）
//	*	返 回 值：无
***********************************************************/
void AiP650_write(unsigned char dat)	//写8bit数据
{
	unsigned char i;

	for(i=0;i<8;i++)
	{
		SCL_650 = 0;
		if(dat&0x80)
		{
			SDA_650 = 1;
		}else
		{
			SDA_650 = 0;
		}

		delay_us(1);
		SCL_650 = 1;
		dat <<= 1;
		delay_us(1);
	}
	ack();
}

/**********************************************************
//	*	函数名称：数据读出
//	*	功		能：读出8bit数据
//	*	参		数：无
//	*	返 回 值：temp（读出的数据）
***********************************************************/
unsigned char AiP650_read(void)			//读8bit数据
{

	unsigned char temp,i;


	for (i = 0;i < 8;i++)
	{
		SCL_650 = 1;
		delay_us(1);
		temp <<= 1;
		temp |= SDA_650_IN;
		SCL_650 = 0;
		delay_us(1);
	}

	SDA_650 = 1;

	SCL_650 = 1;

	delay_us(1);
	SCL_650 = 0;
	delay_us(1);
	return temp;
}
/**********************************************************
//	*	函数名称：命令传输
//	*	功		能：发送16bit命令
//	*	参		数：cmd（发送到命令）
//	*	返 回 值：无
***********************************************************/
void AiP650_write_cmd(uint16_t cmd)		//写16位指令
{
	AiP650_start();							//开始
	AiP650_write(cmd >> 8);			//写入命令的高八位
	AiP650_write(cmd & 0xff);		//写入命令的低八位
	AiP650_stop();								//结束
}

void AiP650_display(unsigned char tmp4,unsigned char tmp1,unsigned char tmp3,unsigned char tmp2)
{
	AiP650_write_cmd(0x4801);		      //开显示，8级显示（0x4801）;睡眠使能,时钟停振（0x4804） 4861
	AiP650_write_cmd(0x6800|tmp1);		//COM1显示数据个位
	AiP650_write_cmd(0x6A00|tmp3);		//COM3显示数据个分位
	AiP650_write_cmd(0X6C00|tmp2);		//COM2显示数据十分位
	AiP650_write_cmd(0X6E00|tmp4);		//COM0显示数据十位
}

void AiP650_display_low(unsigned char tmp4,unsigned char tmp1,unsigned char tmp3,unsigned char tmp2)
{
	AiP650_write_cmd(0x4841);		      //开显示，8级显示（0x4801）;睡眠使能,时钟停振（0x4804） 4861
	AiP650_write_cmd(0x6800|tmp1);		//COM1显示数据个位
	AiP650_write_cmd(0x6A00|tmp3);		//COM3显示数据个分位
	AiP650_write_cmd(0X6C00|tmp2);		//COM2显示数据十分位
	AiP650_write_cmd(0X6E00|tmp4);		//COM0显示数据十位
}
//void  AiP650_all_show(void)
//{
//	AiP650_display(0x7f,0x7f,0x7f,0x7f);
//}

